#!/bin/bash
# 拷贝需要分析的物种的数据，输入需要分析的含物种名的文件（--species），数据所在路径（--input），拷贝到的目标路径（--output）
"""
species.txt文件格式如下：
Aal2
Aan1
Aar4

"""
# 结果：在data目录下，以各个物种名为文件夹名下含有后续分析需要的四个文件
# 以Aal2物种为例，在data/Aal2目录下有pfam.table.txt、Aal2.bed、eggnog.emapper.annotations.all.txt、Aal2_mRNA_countsLength.txt文件
python 001.copy_imp_files.py --species species.txt --input /data/genome/IMP --output data

# 开启分析


# 第一步基因簇识别和计算基因密度
# 以Aal2物种为例，其中碱基数量（-base_num）和基因数量（-gene_num）对应于data/Aal2/Aal2_mRNA_countsLength.txt的第三列和第二列值
# 结果：在01.cluster_result目录中生成Aal2___cluster_table_2.xlsx表格以及在01.local_density_json目录中生成Aal2.json文件
python 01.plant_gene_cluster_base_local_density.py -species Aal2 -base_num 939218608 -gene_num 75505 -bed data/Aal2/Aal2.bed -output_table ./01.cluster_result
# 对于物种数较多时可以采用01.multipro_cluster.py批量跑第一步分析
# 此时需要修改一下数据所在路径（需要将"../imp_data"修改为上述拷贝到的目标路径，即data，最好给绝对路径以防由于路径不对报错


# 第二步给上述生成的表格添加基因的描述和GOG分类信息
# 以Aal2物种为例，此时需要data/Aal2/eggnog.emapper.annotations.all.txt文件信息
# 结果：在02.cluster_add_gene_info目录中生成Aal2___add_gene_info.xlsx表格
python 02.add_gene_info.py -cluster 01.cluster_result/Aal2___cluster_table_2.xlsx -gene data/Aal2/eggnog.emapper.annotations.all.txt -output 02.cluster_add_gene_info/Aal2___add_gene_info.xlsx
# 对于物种数较多时可以采用02.multipro_add_gene_info.py批量跑第二步分析


# 第三步再添加Pfam结果
# 以Aal2物种为例，此时需要data/Aal2/pfam.table.txt文件信息
# 结果：在03.cluster_add_pfam_info目录中生成Aal2___add_pfam_info.xlsx表格
python 03.add_pfam_info.py -cluster 02.cluster_add_gene_info/Aal2___add_gene_info.xlsx -pfam data/Aal2/pfam.table.txt -output 03.cluster_add_pfam_info/Aal2___add_pfam_info.xlsx
# 对于物种数较多时可以采用03.multipro_add_pfam_info.py批量跑第三步分析


# 第四步生成输入大模型的Prompt文件
# 以Aal2物种为例，结果：在04.prompt目录中生成Aal2.json
python 04.cluster_prompt.py -input 03.cluster_add_pfam_info/Aal2___add_pfam_info.xlsx -output 04.prompt/Aal2.json
# 对于物种数较多时可以采用04.multipro_prompt.py批量跑第四步分析


# 第五步大模型总结每个GRR主要功能然后生成标签
# 以Aal2物种为例，结果：在05.gene_cluster_glm_summary目录中生成Aal2.xlsx
python 05.gene_cluster_glm_4_summary_multipro.py -input 04.prompt/Aal2.json -output 05.gene_cluster_glm_summary/Aal2.xlsx -multi 50
# 对于物种数较多时可以采用05.summary_multipro_exec.py批量跑第五步分析


# 第六步提取大模型总结的标签并做去重处理
# 以Aal2物种为例，结果：在06.summary_labels_duplicate_to_list目录中生成Aal2.txt
python 06.extrac_summary_labels.py -input 05.gene_cluster_glm_summary/Aal2.xlsx -output ./06.summary_labels_duplicate_to_list/Aal2.txt
# 对于物种数较多时可以采用06.multi_exec_extrac_summary_labels.py批量跑第六步分析


# 第七步标签向量化
# 此脚本调用大模型可能由于连接不上报错，脚本中一直调用大模型，直到不报错为止：
# 以Aal2物种为例，结果：在07.embedding_result目录中生成Aal2.json
python 07.labels_embedding.py -label_input ./06.summary_labels_duplicate_to_list/Aal2.txt -output ./07.embedding_result/Aal2.json
# 对于物种数较多时可以采用07.multi_labels_embedding.py批量跑第七步分析


# 第八步拆分向量化的结果表格
# 以Aal2物种为例，结果在08.split_file/Aal2目录中生成50个拆开的向量化的结果表格
python 08.label_embedding_split.py -input ./07.embedding_result/Aal2.json -output ./08.split_file/Aal2 -split_num 50
# 对于物种数较多时可以采用08.multi_label_embedding_split.py批量跑第八步分析


# 第九步GRR标签和概念树做文本向量的聚类
# 此脚本需要概念树文件menu_tree_to_dict_embedding.json
# 以Aal2物种为例，对于第八步得到拆分开的50个结果表格，都运行第九步
# 结果：在09.cluster_result/Aal2目录中生成50个json
for i in {1..50};do
	python 09.label_concept_tree_cluster.py -label_df ./08.split_file/Aal2/part_${i}.csv -concept_json ./menu_tree_to_dict_embedding.json -output_file 09.cluster_result/Aal2/part_${i}.json 
done
# 对于物种数较多时可以采用09.merge_label_concept_tree_cluster.py（原本有并行跑，现在修改单个跑，多了会卡）批量跑第九步分析


# 第十步大模型判断label在概念树中最适合的，也是由于调用大模型会报错，导致有些标签结果为空
# 10.llm_two_step_calssifiation.py中增加了重新运行的次数（label_to_concepts_tree_chatglm4自定义函数），
# 目前次数设置为1000，后续如果发现标签结果存在空，可以增大此次数
# 以Aal2物种为例，对于第九步得到的50个json，都运行第十步
# 结果：在10.llm_result/Aal2/中生成50个json文件
for i in {1..50};do
	python 10.llm_two_step_calssifiation.py -input ./09.cluster_result/Aal2/part_${i}.json -output ./10.llm_result/Aal2/part_${i}.json -multi 200
done
# 对于物种数较多时可以采用10.multi_llm_two_step_calssifiation.py批量跑第十步分析


# 第十一步处理大模型生成的结果生成label和它的父级标签字典
# 当上述标签结果为空时，这里运行脚本会报错
# 以Aal2物种为例，上述50个json文件经过这一步处理最终生成一个json文件：
python 11.extrct_sub_parent.py -input ./10.llm_result/Aal2 -output ./11.sub_parent/Aal2.json
# 对于物种数较多时可以采用11.multi_extrct_sub_parent.py批量跑第十一步分析


# 第十二步找到label对应概念的全部父级标签
# 该脚本需要概念树文件menu_tree_to_dict_embedding.json
# 以Aal2物种为例，结果：在12.tree_concept_parent目录中生成Aal2.json
python 12.label_tree_concept_parent.py -tree_embedding ./menu_tree_to_dict_embedding.json -label_tree_concept ./11.sub_parent/Aal2.json -output ./12.tree_concept_parent/Aal2.json
# 对于物种数较多时可以采用12.multi_label_tree_concept_parent.py批量跑第十二步分析


# 第十三步生成概念树注释表格
# 以Aal2物种为例，需要第三步结果文件03.cluster_add_pfam_info/Aal2___add_pfam_info.xlsx
# 第五步结果文件05.gene_cluster_glm_summary/Aal2.xlsx
# 第十二步结果文件12.tree_concept_parent/Aal2.json
# 结果：在13.tree_annotation_to_table目录中生成Aal2.xlsx
python 13.tree_annotation_to_table.py -add_pfam_table 03.cluster_add_pfam_info/Aal2___add_pfam_info.xlsx -cluster_table ./05.gene_cluster_glm_summary/Aal2.xlsx -concept_tree ./12.tree_concept_parent/Aal2.json -output ./13.tree_annotation_to_table/Aal2.xlsx
# 对于物种数较多时可以采用13.multi_tree_annotation_to_table.py批量跑第十三步分析


# 第十四步生成层次圈图数据
# 此脚本需要概念树文件menu_tree_to_dict_embedding.json
# 以Aal2物种为例，需要第十二步结果文件12.tree_concept_parent/Aal2.json和第十三步结果文件13.tree_annotation_to_table/Aal2.xlsx
# 结果：在14.concept_circle/Aal2目录中生成Aal2对应物种的json（all.json）和染色体为名的json文件
python 14.generate_concept_circle.py -annotation_table ./13.tree_annotation_to_table/Aal2.xlsx -tree ./menu_tree_to_dict_embedding.json -concept_parent_all ./12.tree_concept_parent/Aal2.json -output_dir ./14.concept_circle
# 对于物种数较多时可以采用14.multi_generate_concept_circle.py批量跑第十四步分析


# 第十五步生成局部基因密度文件
# 第一步每个物种在./01.local_density_json文件夹下会生成对应json文件，处理这些文件
# 以Aal2物种为例，结果：在15.density目录中生成Aal2___density.json文件
python 15.generate_density_json.py


# 第十六步生成物种相关信息统计表格
# 读取第十三步生成概念树注释表格结合物种信息表数据生成物种相关信息统计表格
# 当物种树多个时，即13.tree_annotation_to_table目录中有多个物种信息，生成合并到genome_statistic_info.csv表格中
# 需要的cell_species.csv含有物种信息文件更新为20250814_cell_species.csv，后者含有更多物种
# 此时在16.species_statistics目录中生成基因组统计信息表genome_statistic_info.csv，是需要入库的文件
# 以Aal2物种为例，结果：在16.species_statistics目录中生成Aal2物种基因组统计信息表（一行）
python 16.generate_species_statistic_sql.py


# 第十七步生成基因信息表
# 读取第十三步生成概念树注释表格结合物种信息表数据生成物种相关信息统计表格
# 当物种树多个时，即13.tree_annotation_to_table目录中有多个物种信息，生成合并到gene_info.csv表格中
# 需要的cell_species.csv含有物种信息文件更新为20250814_cell_species.csv
# 此时在17.gene_info目录中生成了基因信息表gene_info.csv，是需要入库的文件
# 以Aal2物种为例，结果：在17.gene_info目录中生成Aal2各个基因信息表（多行）
python 17.generate_gene_sql.py

# 第十八步生成结果要展示的json文件
# 将第十四步生成的json文件和第十五步生成的json文件放到一起，是需要入库的
# 以Aal2物种为例，结果：在18.production/Aal2目录中含有Aal2___density.json（第十五步结果）以及子目录concept中含有第十四步结果
python 18.json_to_production.py


